package cn.wen.yaling.xo.service;

import cn.wen.yaling.commons.utils.ResultEntity;
import cn.wen.yaling.commons.vo.RegisterUser;
import cn.wen.yaling.commons.vo.UserAddVO;
import cn.wen.yaling.commons.vo.UserRoleUpdateVO;
import cn.wen.yaling.commons.vo.UserUpdateVO;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.wen.yaling.commons.utils.PageUtils;
import cn.wen.yaling.commons.entity.UserEntity;

import java.util.List;
import java.util.Map;

/**
 * 
 *
 * @author FY
 * @email 932043654@qq.com
 * @date 2022-08-13 02:07:37
 */
public interface UserService extends IService<UserEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 通过账号来获取用户数据
     * @param account
     * @return
     */
    UserEntity getUserByAccount(String account);

    /**
     * 通过账号来获取用户数据(不经过redis中间缓存)
     * @param account
     * @return
     */
    UserEntity getUserByAccountDB(String account);

    /**
     * 通过状态获取激活的用户
     * @param status
     * @return
     */
    Long getUserCountByStatus(Integer status);

    /**
     * 获取用户列表
     * @return
     */
    ResultEntity getUserList();

    /**
     * 添加用户信息
     * @param userVO
     * @return
     */
    ResultEntity addUser(UserAddVO userVO);

    /**
     * 更新用户信息
     * @param userVO
     * @return
     */
    ResultEntity editUser(UserUpdateVO userVO);

    /**
     * 批量删除用户信息
     * @param userIds
     * @return
     */
    ResultEntity deleteBatchUserByIds(List<Integer> userIds);

    /**
     * 重置用户密码
     * @param userId
     * @return
     */
    ResultEntity resetUserPassword(String userId);

    /**
     * 搜索用户信息
     * @param keyword
     * @return
     */
    ResultEntity searchUserList(String keyword);

    /**
     * 分配角色
     * @param userVO
     * @return
     */
    ResultEntity updateUserRoleRelation(UserRoleUpdateVO userVO);

    /**
     * 通过账号获取用户信息
     * @param account
     * @return
     */
    UserEntity getUserByUserName(String account);

    /**
     * 校验是否存在当前用户手机号
     * @param userPhone
     * @return
     */
    boolean checkUserByUserPhone(String userPhone);

    /**
     * 通过手机号注册
     * @param userPhone
     */
    void registerByPhone(String userPhone);

    /**
     * 修改当前登录状态等
     * @param userId
     */
    void updateUserLocalInfo(String userId);

    /**
     * 注册用户
     * @param user
     */
    void registerByUser(RegisterUser user);

    /**
     * 获取用户数据
     * @param userId
     * @return
     */
    ResultEntity getUserInfoByUserId(String userId);

    /**
     * 通过UserId获取用户信息
     * @param userId
     * @return
     */
    UserEntity getUserByUserId(String userId);

    /**
     * 获取用户的所有菜单列表
     * @param userId
     * @return
     */
    ResultEntity getUserMenuList(String userId);
}

